Skip to content
快速预览

组合 聚合复用原则

✍️ w 🕒 2023-07-23 12:23:51(10 months ago) 🔗 G.设计模式

组合/聚合复用原则(Composite/Aggregate Reuse Principle)是面向对象设计原则的一种,也叫合成复用原则。组合/聚合复用原则是指尽量使用组合/聚合,不要使用类继承。在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的。

多用组合少用继承,我们知道,继承是一种强依赖关系,父类与子类高度耦合,且这种耦合关系非常脆弱,牵一发而动全身,父类的每一次改动都会影响所有的子类。相反,组合关系是一种弱依赖关系,这种关系更加灵活,所以,对于继承结构比较复杂的代码,利用组合来替换继承,也是一种解耦的有效手段。

尽量采用组合(contains-a)、聚合(has-a)的方式而不是继承(is-a)的关系来达到软件的复用目的

在给出的代码例子中,Manager和Employee都继承自Person类,这样做的问题在于,如果我们要给Person添加新的角色,那么使用继承的方式就会导致每个Person只能有一个角色,这显然是不合理的。因为在现实生活中,一个人可能同时具有多种角色。

如果按照组合/聚合复用原则,我们应该创建一个新的Role类,然后在Person类中使用Role类的实例,这样就可以让一个Person具有多个角色,更符合现实生活中的情况。这就是“Has-A”的关系,即Person具有Role,而不是Person是Role(“Is-A”的关系)。

java
public class Person {
    public void talk(String name) {
        System.out.println(name + " say hello");
    }
    public void walk(String name) {
        System.out.println(name + " move");
    }
}

public class Manager extends Person { 
}

public class Employee extends Person {
}

Released under the MIT License.